Hadoop 大数据

1.大数据介绍

        大数据指的是所涉及的数据量规模巨大到无法通过人工,在合理时间内达到截取、管理、处理、并整理成为人类所能解读的形式的信息。

        大数据,可帮助我们察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定即时交通路况等。

        麦肯锡全球研究院(MGI)预测,到 2020年,全球数据使用量预计将达到 35ZB(1ZB=1000EB,1EB=1000PB,1PB=1000TB,1TB=1000GB)。

        Google每天要处理的数据高达几百PB。百度每天处理数据几十PB。腾讯微信活跃用户数达7亿,每天产生的数据量上百TB,2016年除夕当日,微信红包的参与人数达到4.2亿人,收发总量达80.8亿个。

        多源异构:描述同一主题的数据由不同的用户、不同的网站产生。网络数据有多种不同的呈现形式,如音视频、图片、文本等,导致网络数据格式上的异构性。

  • 交互性:不同于测量和传感获取的大规模科学数据,微博等社交网络兴起导至大量网络数据具有很强的交互性。

  • 时效性:在网络平台上,每时每刻都有大量新的网络数据发布,网络信息内容不断变化,导致了信息传播的时序相关性。

  • 社会性:网络上用户根据自己的需要和喜好发布、回复或转发信息,因而网络数据成了对社会状态的直接反映。

  • 突发性:有些信息在传播过程中会在短时间内引起大量新的网络数据与信息的产生,并使相关的网络用户形成网络群体,体现出网络大数据以及网络群体的突发特性。

  • 高噪声:网络数据来自于众多不同的网络用户,具有很高的噪声。

2.Hadoop 介绍

        hadoop是一个开源分布式计算平台框架,基于apache协议发布,由java语言开发。http://hadoop.apache.org/

        hadoop两大核心组件:HDFS(分布式文件系统,为分布式计算提供了数据存储)和mapreduce(应用程序被分区成许多小部分,而每个部分都能在集群中的任意节点上运行,一句话就是任务的分解和结果的汇总)

        另外两个模块:Common、YARN

        其他和hadoop相关的项目:Ambari、Avro、Cassandra、Chukwa、Hbase、Hive、Mahout、Pig、Spark、Tez、Zookeeper

        hadoop支持由廉价的计算机搭建集群,有强大的冗余机制。

        hadoop在各大互联网企业中应用广泛,百度使用hadoop进行搜索日志的分析和网页数据的挖掘工作;淘宝使用hadoop存储并处理电子商务交易相关数据;facebook使用hadoop进行数据分析和机器学习。

        还有哪些企业在使用hadoop http://wiki.apache.org/hadoop/PoweredBy

3.Hadoop组件以及相关项目介绍

        Common:为其他组件提供常用工具支持。

        YARN:作业调度和集群管理的框架。

        Ambari: 是 Apache Software Foundation 中的一个项目。就 Ambari 的作用来说,就是创建、管理、监视 Hadoop 的集群,但是这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等)。用一句话来说,Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。Ambari——大数据平台的搭建利器

        Avro:Avro是Hadoop中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件。在Hadoop的其他项目中例如HBase(Ref)和Hive(Ref)的Client端与服务端的数据传输也采用了这个工具。Avro是一个数据序列化的系统。Avro 可以将数据结构或对象转化成便于存储或传输的格式。Avro设计之初就用来支持数据密集型应用,适合于远程或本地大规模数据的存储和交换。Avro简介

        Cassandra:可扩展的多主数据库,不存在单点故障。

        Chukwa:是数据收集系统,用于监控和分析大型分布式系统的数据。

        HBase:是一个分布式面向列的数据库。

        Hive:最早由facebook设计,是建立在hadoop基础之上的数据仓库,它提供了一些用于数据整理、特殊查询和分析在hadoop文件中数据集工具。

        Mahout:可扩展的机器学习和数据挖掘库。

        Pig:是一种高级语言和并行计算可执行框架,它是一个对大型数据集分析和评估的平台。

        Spark:一个快速和通用计算的Hadoop数据引擎。和mapreduce类似,但是要比mapreduce快。它提供了一个简单而丰富的编程模型,支持多种应用,包括ETL、机器学习、数据流处理、图形计算。 参考文档 2分钟读懂Hadoop和Spark的异同

        Tez:是Apache最新的支持DAG作业的开源计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。Tez并不直接面向最终用户,事实上它允许开发者为最终用户构建性能更快、扩展性更好的应用程序。Hadoop传统上是一个大量数据批处理平台。但是,有很多用例需要近乎实时的查询处理性能。还有一些工作则不太适合MapReduce,例如机器学习。Tez的目的就是帮助Hadoop处理这些用例场景。

        ZooKeeper:ZooKeeper是一组工具,用来配置和支持分布式调度。一个重要功能就是对所有节点进行配置的同步。它能处理分布式应用的“部分失败”问题。部分失败是分布式处理系统的固有特征,即发送者无法知道接收者是否收到消息,它的出现可能和网络传输问题、接收进程意外死掉等有关系。ZooKeeper是Hadoop生态系统的一部分,但又远不止如此,它能支持更多类似的分布式平台和系统,如Jubatus,Cassender等等。而且HBase明确指出至少需要一个ZooKeeper实例的支持。

4.HDFS 介绍

        HDFS设计思想来源于Google的GFS,是GFS的开源实现。

        HDFS要解决的问题

  1. 存储超大文件,比如TB级别
  2. 防止文件丢失

        HDFS的特点

  1. 可以存储超大文件
  2. 只允许对一个已经打开的文件顺序写入,还可以在现有文件的末尾追加。要想修改一个文件(追加内容除外),只能删除后再重写
  3. 可以使用廉价的硬件平台搭建,通过容错策略来保证数据的高可用,默认存储3份数据,任何一份丢失可以自动恢复

        HDFS的缺点

  1. 数据访问延迟比较高,因为它的设计场景是用于大吞吐量数据,HDFS是单master,所有文件都要经过它,当请求数据量很大时,延迟就增加了
  2. 文件数受限,和NameNode有关系
  3. 不支持多用户写入,也不支持文件任意修改

HDFS 架构

HDFS的几个核心概念

        数据块(block):大文件会被分割成多个block进行存储,block大小默认为64MB。每一个block会在多个datanode上存储多份副本,默认是3份。

        namenode:namenode负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系。

        SecondaryNameNode:分担namenode的工作量,是NameNode的冷备份,它的主要工作是合并fsimage(元数据镜像文件)和fsedits(元数据操作日志)然后再发给namenode。

        datanode:datanode就负责存储了,当然大部分容错机制都是在datanode上实现的。

        rack 是指机柜的意思,一个block的三个副本通常会保存到两个或者两个以上的机柜中(当然是机柜中的服务器),这样做的目的是做防灾容错,因为发生一个机柜掉电或者一个机柜的交换机挂了的概率还是蛮高的。

        几篇不错的文章

        【Hadoop】HDFS的运行原理

        HDFS原理分析—— 基本概念

        HDFS 原理、架构与特性介绍

5.HSDS写数据流程

        HDFS写文件流程

        Client向远程的Namenode发起RPC请求;

        Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件 创建一个记录,否则会让客户端抛出异常

        当客户端开始写入文件的时候,会将文件切分成多个packets,并向Namenode申请blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。

        此时会形成一个pipline用来传输packet。

        packet以流的方式写入第一个datanode,该datanode把packet存储之后,再将其传递给下一个datanode,直到最后一个datanode。

        最后一个datanode成功存储之后会返回一个ack 传递至客户端,在客户端,客户端确认ack后继续写入下一个packet。

        如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量

6.HDFS 读数据流程

        HDFS读文件流程

        Client向远程的Namenode发起RPC请求

        Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址

        Client会选取离自己最接近的DataNode来读取block

        读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode

        当读完列表的block后,且文件读取还没有结束,client会继续向Namenode获取下一批的block列表

        读取完block会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读

7.mapreduce 详解

MapReduce模型

        MapReduce 是大规模数据(TB 级)计算的利器,Map 和Reduce 是它的主要思想,来源于函数式编程语言。

        Map负责将数据打散,Reduce负责对数据进行聚集,用户只需要实现map 和reduce 两个接口,即可完成TB级数据的计算。

        常见的应用包括:日志分析和数据挖掘等数据分析应用。另外,还可用于科学数据计算,如圆周率PI 的计算等。

        当我们提交一个计算作业时,MapReduce会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出

MapReduce 执行过程

        每个 Mapper 任务是一个 java 进程,它会读取 HDFS 中的文件,解析成很多的键值对,经过我们 map 方法处理后, 转换为很多的键值对再输出

        把 Mapper 任务的运行过程分为六个阶段。

        第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。

        第二阶段是对输入片中的记录按照一定的规则解析成键值对。

        第三阶段是调用 Mapper 类中的 map 方法。

        第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。

        第五阶段是对每个分区中的键值对进行排序。

        第六阶段是对数据进行归纳处理,也就是 reduce 处理。键相等的键值对会调用一次reduce 方法。

Reducer任务的执行过程

        每个 Reducer 任务是一个 java 进程。Reducer 任务接收 Mapper 任务的输出,归约处理后写入到 HDFS 中。

        可以分为3个阶段

        第一阶段是 Reducer 任务会主动从 Mapper 任务复制其输出的键值对。 Mapper 任务可能会有很多,因此 Reducer 会复制多个 Mapper 的输出。

        第二阶段是把复制到 Reducer 本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。

        第三阶段是对排序后的键值对调用 reduce 方法。 键相等的键值对调用一次 reduce 方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到 HDFS 文件中。

8.安装 hadoop–准备工作

        三台机器(内存大于2G) 分别写hosts、设定hostname。三台机器分别设置hostname 为master 、slave1、slave2。更改 hosts

1
2
3
4
5
6
7
vim /etc/hosts
```
```bash
192.168.0.87 master
192.168.0.86 slave1
192.168.0.85 slave2

        关闭selinux,关闭firewalld

1
2
3
4
5
6
7
8
9
10
11
12
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@master ~]# systemctl stop firewalld
[root@master ~]# yum install -y iptables-services
[root@master ~]# systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@master ~]# systemctl start iptables
[root@master ~]# iptables -F
[root@master ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]

        以上操作三台机器都需执行。

9.安装 hadoop–密钥认证

        master可以通过密钥登陆本机和两台slave

        master上生成密钥对:

        ssh-keygen 一直回车

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@master ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
29:86:0f:70:28:2b:0a:9e:9c:98:39:dc:d2:c2:5b:d4 root@master
The key's randomart image is:
+--[ RSA 2048]----+
| |
| . |
|. o . |
| o o.. . |
|+ .oEo S |
|Xo* + . |
|*X + . |
| .= |
| . |
+-----------------+

        复制~/.ssh/id_rsa.pub 内容到本机和两台slave的 ~/.ssh/authorized_keys

1
2
[root@master ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZfOQKxMrCOf95iZvdNkTg32nQeUp3rywF+d0SS+t5ccZ0YjbZUZVFOkh5Sg5gdsjLgJoduZDePtYYhbex1kKPs8E6cx073ZqpW37TBGObCv7Inz1Ks+TSplnw/AKH6uRTEswC5P2SD+mJ+iz+OTgsNJyrj+OGGH1gOhmzQuAznSChqkJaihNhcBOOuJf8rVqhmplN9YPuGBlGc3It6uFHZvw8C42bC7xyqobL3FRZwKw85WQ9ZjdPTKQzg5rcn76gCld9fRuWkL1ABbP6MRIawN5eonYMYVS05PUGVadHM+a9L5nwTAbA4YqGyQ0m37mHV+5BwaBHxQyY5RSIiiyH root@master
1
[root@master ~]# vim .ssh/authorized_keys

        设置本机和两台slave机器上的~/.ssh/authorized_keys文件权限为600

1
[root@master ~]# chmod 600 ~/.ssh/authorized_keys

        在master上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@master ~]# ssh master
Last failed login: Tue Jan 10 16:58:22 CST 2017 from master on ssh:notty
There were 8 failed login attempts since the last successful login.
Last login: Tue Jan 10 16:53:03 2017 from 192.168.0.100
[root@master ~]# 登出
Connection to master closed.
[root@master ~]# ssh slave1
Last login: Tue Jan 10 16:52:18 2017 from master
[root@slave1 ~]# 登出
Connection to slave1 closed.
[root@master ~]# ssh slave2
Last login: Tue Jan 10 16:55:40 2017 from master
[root@slave2 ~]# 登出
Connection to slave2 closed.

        可以直接登陆

10.安装 hadoop –安装 JDK

        hadoop2.7 需要安装jdk1.7版本

        下载地址http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

        解压压缩包

1
2
[root@master ~]# tar zxvf jdk-8u111-linux-x64.tar.gz
[root@master ~]# mv jdk1.8.0_111 /usr/local/

        编写环境变量配置

1
[root@master ~]# vim /etc/profile.d/java.sh

        写入

1
2
3
4
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/li
b/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
1
[root@master ~]# source /etc/profile.d/java.sh

        java -version 查看是否生效

1
2
3
4
[root@master ~]# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

        slave1 和 slave2 重复上面的操作

11.安装hadooop-安装 hadoop 包

        以下操作在master上执行

        下载地址 http://hadoop.apache.org/releases.html

        镜像站 http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.1/

        下载2.7.1 binary版本

1
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz

        解压 tar zxf hadoop-2.7.1.tar.gz

1
2
3
4
5
6
7
[root@master ~]# tar zxf hadoop-2.7.1.tar.gz
[root@master ~]# mv hadoop-2.7.1 /usr/local/hadoop
[root@master ~]# cd /usr/local/hadoop
[root@master hadoop]# mkdir tmp dfs dfs/data dfs/name
[root@master hadoop]# ls
bin etc lib LICENSE.txt README.txt share
dfs include libexec NOTICE.txt sbin tmp

        把/usr/local/hadoop 目录分别拷贝至两个slave上

1
2
[root@master hadoop]# rsync -av /usr/local/hadoop slave1:/usr/local/
[root@master hadoop]# rsync -av /usr/local/hadoop slave2:/usr/local/

12.安装 hadoop -配置 hadoop

        master上 vim /usr/local/hadoop/etc/hadoop/core-site.xml

1
[root@master hadoop]# vim /usr/local/hadoop/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.87:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>

        master上 vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

1
[root@master hadoop]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.0.87:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

        master上 vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

1
2
[root@master hadoop]# mv /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
[root@master hadoop]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>172.7.15.113:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.0.87:19888</value>
</property>
</configuration>

        master上 vim /usr/local/hadoop/etc/hadoop/yarn-site.xml

1
[root@master hadoop]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.0.87:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.0.87:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.0.87:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.0.87:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.0.87:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
</configuration>

        以下在master上操作

        更改JAVA_HOME

1
2
[root@master hadoop]# cd /usr/local/hadoop/etc/hadoop
[root@master hadoop]# vim hadoop-env.sh

        改为

1
export JAVA_HOME=/usr/local/jdk1.8.0_111

        更改JAVA_HOME

1
[root@master hadoop]# vim yarn-env.sh

        改为

1
export JAVA_HOME=/usr/local/jdk1.8.0_111

        slaves 文件修改

1
[root@master hadoop]# vim slaves
1
2
192.168.0.86
192.168.0.85

        将master上的etc目录同步至两个slave

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@master hadoop]# rsync -av /usr/local/hadoop/etc/ slave1:/usr/local/hadoop/etc/
sending incremental file list
hadoop/
hadoop/core-site.xml
hadoop/hadoop-env.sh
hadoop/hdfs-site.xml
hadoop/mapred-site.xml
hadoop/slaves
hadoop/yarn-env.sh
hadoop/yarn-site.xml
sent 6527 bytes received 269 bytes 13592.00 bytes/sec
total size is 79165 speedup is 11.65
[root@master hadoop]# rsync -av /usr/local/hadoop/etc/ slave2:/usr/local/hadoop/etc/
sending incremental file list
hadoop/
hadoop/core-site.xml
hadoop/hadoop-env.sh
hadoop/hdfs-site.xml
hadoop/mapred-site.xml
hadoop/slaves
hadoop/yarn-env.sh
hadoop/yarn-site.xml
sent 6527 bytes received 269 bytes 13592.00 bytes/sec
total size is 79165 speedup is 11.65

        启动

        在master上操作即可,两个slave会自动启动

        初始化

1
2
3
[root@master hadoop]# /usr/local/hadoop/bin/hdfs namenode -format
[root@master hadoop]# echo $?
0

        启动服务

1
2
3
4
5
6
7
8
9
10
11
12
[root@master hadoop]# /usr/local/hadoop/sbin/start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [master]
master: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-master.out
192.168.0.85: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-slave2.out
192.168.0.86: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-slave1.out
Starting secondary namenodes [master]
master: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-master.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-master.out
192.168.0.85: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-slave2.out
192.168.0.86: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-slave1.out

        停止服务

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@master hadoop]# /usr/local/hadoop/sbin/stop-all.sh
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
Stopping namenodes on [master]
master: stopping namenode
192.168.0.85: stopping datanode
192.168.0.86: stopping datanode
Stopping secondary namenodes [master]
master: stopping secondarynamenode
stopping yarn daemons
stopping resourcemanager
192.168.0.85: no nodemanager to stop
192.168.0.86: no nodemanager to stop
no proxyserver to stop

        访问

        浏览器打开http://192.168.0.87:8088

        浏览器打开http://192.168.0.87:50070

        也可以在 master、slave1、slave2 上执行命令

1
[root@master hadoop]# ps aux |grep java
1
2
3
4
5
6
7
8
9
[root@master hadoop]# netstat -lnp |grep java
tcp 0 0 0.0.0.0:50070 0.0.0.0:* LISTEN 3626/java
tcp 0 0 192.168.0.87:9000 0.0.0.0:* LISTEN 3626/java
tcp 0 0 192.168.0.87:9001 0.0.0.0:* LISTEN 3820/java
tcp6 0 0 192.168.0.87:8088 :::* LISTEN 3985/java
tcp6 0 0 192.168.0.87:8030 :::* LISTEN 3985/java
tcp6 0 0 192.168.0.87:8031 :::* LISTEN 3985/java
tcp6 0 0 192.168.0.87:8032 :::* LISTEN 3985/java
tcp6 0 0 192.168.0.87:8033 :::* LISTEN 3985/java

13.测试 hadoop

        以下操作在master上实现

        建立测试目录

1
2
3
4
5
[root@master hadoop]# cd /usr/local/hadoop
[root@master hadoop]# bin/hdfs dfs -mkdir /123
[root@master hadoop]# bin/hdfs dfs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2017-01-11 17:22 /123

        如果提示

1
copyFromLocal: Cannot create directory /123/. Name node is in safe mode.

        这是因为开启了安全模式,解决办法

1
[root@master hadoop]# bin/hdfs dfsadmin -safemode leave

        将当前目录下的LICENSE.txt复制到hadopp中,查看/123/下有哪些文件 bin/hdfs dfs -ls /123

1
2
3
4
[root@master hadoop]# bin/hdfs dfs -copyFromLocal ./LICENSE.txt /123
[root@master hadoop]# bin/hdfs dfs -ls /123
Found 1 items
-rw-r--r-- 2 root supergroup 15429 2017-01-11 17:29 /123/LICENSE.txt

        用wordcount分析LICENSE.txt

1
[root@master hadoop]# bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /123/LICENSE.txt /output/123

        bin/hdfs dfs -ls /output/123 查看分析后的文件

1
2
3
4
[root@master hadoop]# bin/hdfs dfs -ls /output/123
Found 2 items
-rw-r--r-- 2 root supergroup 0 2017-01-11 17:47 /output/123/_SUCCESS
-rw-r--r-- 2 root supergroup 8006 2017-01-11 17:47 /output/123/part-r-00000

        bin/hdfs dfs -cat /output/123/part-r-00000 查看分析结果

1
[root@master hadoop]# bin/hdfs dfs -cat /output/123/part-r-00000